jQuery Templates - {Supported Tags}
Posted
by hajan
on ASP.net Weblogs
See other posts from ASP.net Weblogs
or by hajan
Published on Tue, 14 Dec 2010 21:34:00 GMT
Indexed on
2010/12/16
4:11 UTC
Read the original article
Hit count: 537
I have started with Introduction to jQuery Templates, then jQuery Templates - tmpl(), template() and tmplItem() functions. In this blog we will see what supported tags are available in the jQuery Templates plugin.
Template tags can be used inside template together in combination with HTML tags and plain text, which helps to iterate over JSON data.
Up to now, there are several supported tags in jQuery Templates plugin:
- ${expr} or {{= expr}}
- {{each itemArray}} … {{/each}}
- {{if condition}} … {{else}} … {{/if}}
- {{html …}}
- {{tmpl …}}
- {{wrap …}} … {{/wrap}}
- ${expr} or {{= expr}}
Is used for insertion of data values in the rendered template. It can evaluate fields, functions or expression.
Example:
<li> ${Name} {{= Surname}} </li>
</script>
Either ${Name} or {{= Surname}} (with blank space between =<blankspace>Field) will work.
- {{each itemArray}} … {{/each}}
each is everywhere the same "(for)each", used to loop over array or collection
Example:
<li>
${Name} ${Surname}
{{if speaker}}
(<font color="red">speaks</font>)
{{else}}
(attendee)
{{/if}}
{{each phones}}
<br />
${$index}: <em>${$value}</em>
{{/each}}
</li>
</script>
So, you see we can use ${$index} and ${$value} to get the current index and value while iterating over the item collection.
Alternatively, you can add index,value on the following way:
<br />
${i}: <em>${v}</em>
{{/each}}
Result would be:
Here is complete working example that you can run and see the result:
<head id="Head1" runat="server">
<title>Nesting and Looping Example :: jQuery Templates</title>
<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(function () {
var attendees = [
{ Name: "Hajan", Surname: "Selmani", speaker: true, phones:[070555555, 071888999, 071222333] },
{ Name: "Someone", Surname: "Surname", phones: [070555555, 071222333] },
{ Name: "Third", Surname: "Thirdsurname", phones: [070555555, 071888999, 071222333] },
];
$("#attendeesTemplate").tmpl(attendees).appendTo("#attendeesList");
});
</script>
<script id="attendeesTemplate" type="text/html">
<li>
${Name} ${Surname}
{{if speaker}}
(<font color="red">speaks</font>)
{{else}}
(attendee)
{{/if}}
{{each(i,v) phones}}
<br />
${i}: <em>${v}</em>
{{/each}}
</li>
</script>
</head>
<body>
<ol id="attendeesList"></ol>
</body>
</html>
- {{if condition}} … {{else}} … {{/if}}
Standard if/else statement. Of course, you can use it without the {{else}} if you have such condition to check, however closing the {{/if}} tag is required.
Example:
(<font color="red">speaks</font>)
{{else}}
(attendee)
{{/if}}
You have this same code block in the above complete example showing the 'each' cycle ;).
- {{html …}}
Is used for insertion of HTML markup strings in the rendered template. Evaluates the specified field on the current data item, or the specified JavaScript function or expression.
Example:
- without {{html …}}
$(function () {
var attendees = [
{ Name: "Hajan", Surname: "Selmani", Info: "He <font color='red'>is the speaker of today's</font> session", speaker: true },
];
$("#myTemplate").tmpl(attendees).appendTo("#speakers");
});
</script>
<script id="myTemplate" type="text/html">
${Name} ${Surname} <br />
${Info}
</script>
Result:
- with {{html …}}
$(function () {
var attendees = [
{ Name: "Hajan", Surname: "Selmani", Info: "He <font color='red'>is the speaker of today's</font> session", speaker: true },
];
$("#myTemplate").tmpl(attendees).appendTo("#speakers");
});
</script>
<script id="myTemplate" type="text/html">
${Name} ${Surname} <br />
{{html Info}}
</script>
Result:
- {{wrap …}}
It’s used for composition and incorporation of wrapped HTML. It’s similar to {{tmpl}}
Example:
<div id="personInfo">
<br />
${Name} ${Surname}
{{wrap "#myWrapper"}}
<h2>${Info}</h2>
<div>
{{if speaker}}
(speaker)
{{else}}
(attendee)
{{/if}}
</div>
{{/wrap}}
</div>
</script>
<script id="myWrapper" type="text/html">
<table><tbody>
<tr>
{{each $item.html("div")}}
<td>
{{html $value}}
</td>
{{/each}}
</tr>
</tbody></table>
</script>
All the HTMl content inside the {{wrap}} … {{/wrap}} is available to the $item.html(filter, textOnly) method. In our example, we have defined some standard template and created wrapper which calls the other template with id myWrapper. Then using $item.html(“div”) we find the div tag and render the html value (together with the div tag) inside the <td> … </td>. So, here inside td the <div> <speaker or attendee depending of the condition> </div> will be rendered.
The HTML output from this is:
- {{tmpl …}}
Used for composition as template items
Example:
<div id="bookItem">
<div id="bookCover">
{{tmpl "#bookCoverTemplate"}}
</div>
<div id="bookDetails">
<div id="book">
${title} - ${author}
</div>
<div id="price">$${price}</div>
<div id="Details">${pages} pgs. - ${year} year</div>
</div>
</div>
</script>
<script id="bookCoverTemplate" type="text/html">
<img src="${image}" alt="${title} Image" />
</script>
In this example, using {{tmpl “#bookCoverTemplate”}} I’m calling another template inside the first template. In the other template I’ve created template for a book cover.
The rendered HTML of this is:
and
So we have seen example for each of the tags that are right now available in the jQuery Templates (beta) plugin which is created by Microsoft as a contribution to the open source jQuery Project.
I hope this was useful blog post for you.
Regards,
Hajan
© ASP.net Weblogs or respective owner